package com.hzw.saas.api.old.storage;

import java.util.Date;
import java.util.List;

import com.hzw.saas.api.old.storage.bo.ResourceShareBO;
import com.hzw.saas.api.old.storage.bo.ResourceSharePreviewBO;
import com.hzw.saas.api.storage.bo.ResourceShareTokenBO;
import com.hzw.saas.api.user.bo.UserBaseInfoBO;

/**
 * 资源分享接口
 *
 * @author zzl
 * @since 07/02/2021
 */
public interface IResourceShareService {

    /**
     * 获取分享者基本信息
     *
     * @param shareId
     * @return
     */
    UserBaseInfoBO getUserInfo(String shareId);

    /**
     * 验证密码，生成访问token
     *
     * @param shareId
     * @param password
     * @return
     */
    ResourceShareTokenBO checkSharePwd(String shareId, String password);

    /**
     * 检查token，返回对应的shareId
     *
     * @param accessToken
     * @return
     */
    void assertValidToken(String shareId , String accessToken);

    /**
     * 校验分享拥有权限
     *
     * @param userId
     * @param shareId
     */
    void assertAuthOwn(String userId, String shareId);

    /**
     * 校验分享拥有权限
     *
     * @param userId
     * @param shareIds
     */
    void assertAuthOwn(String userId, List<String> shareIds);

    /**
     * 获取分享的资源列表
     *
     * @param shareId   分享ID
     * @param supIdPath 资源路径(id模式)
     * @return 分享信息
     */
    ResourceSharePreviewBO listSharedResources(String shareId, String supIdPath);

    /**
     * 获取用户所有的分享信息
     *
     * @param userId 用户id
     * @return 分享信息列表
     */
    List<ResourceShareBO> listShare(String userId);

    /**
     * 创建分享
     *
     * @param userId       用户ID
     * @param shareName    分享名称
     * @param folderIdList 目录ID列表
     * @param fileIdList   文件ID列表
     * @param password     分享密码
     * @param expireTime   过期时间
     * @return
     */
    String share(String userId, String shareName, List<String> folderIdList, List<String> fileIdList, String password, Date expireTime);

    /**
     * @param shareId
     * @param tarSupId
     * @param folderIdPaths
     * @param fileIdPaths
     */
    void saveSharedResources(String shareId, String tarSupId, List<String> folderIdPaths, List<String> fileIdPaths);

    /**
     * 更新分享
     *
     * @param shareId    分享ID
     * @param password   密码
     * @param expireTime 过期时间
     * @return 更新是否成功
     */
    boolean updateShare(String shareId, String password, Date expireTime);

    /**
     * 删除分享
     *
     * @param shareId 分享ID
     * @return 删除是否成功
     */
    boolean deleteShare(String shareId);

    /**
     * 批量删除分享
     *
     * @param shareIdList 分享ID列表
     * @return 删除是否成功
     */
    boolean deleteShare(List<String> shareIdList);
}
